package com.example.watchs.controller;

import com.example.watchs.common.BaseVO;
import com.example.watchs.common.MonitorDTO;
import com.example.watchs.common.PageIn;
import com.example.watchs.handler.FileMonitorHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author ieb
 */
@RestController
@RequestMapping("/api/monitor")
public class FileMonitorController {
    private final FileMonitorHandler fileMonitorService;

    @Autowired
    public FileMonitorController(FileMonitorHandler fileMonitorService) {
        this.fileMonitorService = fileMonitorService;
    }

    /**
     * 重要方法 在初始化时需要先触发该接口，使线程进行运行
     */
    @PostMapping("/start")
    public boolean startMonitoring() {
        fileMonitorService.startMonitoring();
        return true;
    }

    /**
     * 文件监控列表
     */
    @PostMapping("/list")
    public BaseVO<List<MonitorDTO>> list(PageIn page) {
        return fileMonitorService.list(page);
    }

    /**
     * 开始监控某一个文件
     */
    @PostMapping("/startByName")
    public boolean startMonitorByName(String filePath) {
        return fileMonitorService.startMonitoringByName(filePath);
    }

    /**
     * 停止所有线程监控
     */
    @PostMapping("/stop")
    public boolean stopMonitoring() {
        fileMonitorService.stopMonitoring();
        return true;
    }

    /**
     * 管理一个watchService,但是需要等待下一次操作后完全禁止监控 -- 待1.1时修复
     */
    @PostMapping("/stopByName")
    public boolean stopMonitoringByName(String filePath) {
        return fileMonitorService.stopMonitoringByName(filePath);
    }

}